package com.jprocms.module.cms.config;

import com.jprocms.module.cms.util.SecureUtil;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.lang.Nullable;

import java.util.Arrays;
import java.util.List;

/**
 * 系统配置。
 */
@Data
@ConfigurationProperties(prefix = "jpro.cms")
public class JproProperties {

    public JproProperties() {

    }

    /**
     * ElasticSearch 索引前缀
     */
    private String esPrefix = "cms";
    /**
     * 使用URL作为模板加载地址。使用对象存储保存模板时，需使用这种方式加载模板。
     */
    @Nullable
    private String templateLoaderUrl;
    /**
     * 文件上传后缀黑名单
     */
    private String uploadsBlacklist = "exe,com,bat,jsp,jspx,asp,aspx,php,html,htm,xhtml,xml,shtml,shtm,sh,aspx";

    /**
     * 是否开启文库转换功能
     */
    private boolean convertEnable = false;

    /**
     * 是否演示网站。演示网站的 test 用户只能执行 GET 请求。
     */
    private boolean demo = false;

    /**
     * 下载密钥
     */
    private String downloadSecret = SecureUtil.randomAlphanumeric(32);


    /**
     * 雪花算法主键：数据中心ID
     */
    private int datacenterId;


    /**
     * 雪花算法主键：工作机器ID
     */
    private int workerId;
    /**
     * 是否开启数学公式功能
     */
    private boolean latexOpen = false;
    /**
     * 内容查询来源 默认db 可支持 es
     */
    private String contentQuerySource = "db";

    /**
     * 是否支持文档搜索
     */
    private boolean docSearchSupport = false;
    /**
     * 操作日志记录保存天数
     */
    private int operateLogSaveDays = 360;

    /**
     * 是否开启添加内容的时候允许发布到多个栏目
     */
    private boolean publishMultiChannel = false;
    /**
     * 采集重试次数
     */
    private int crawlerRetryTimes = 3;
    /**
     * 每次抓取间隙时间(毫秒)
     */
    private int crawlerSleepTime = 3000;
    /**
     * 数据库备份根目录
     */
    private String dbBackupRootPath = "";
    /**
     * 本地上传路径 ，为了直接portal访问资源，可以开发阶段暂时不部署nginx
     */
    private String uploadPath;

    /**
     * 文件上传后缀排除列表
     */
    public List<String> getUploadsExtensionExcludes() {
        return Arrays.asList(uploadsBlacklist.split(","));
    }


    public String getUploadsBlacklist() {
        return uploadsBlacklist;
    }

    public void setUploadsBlacklist(String uploadsBlacklist) {
        this.uploadsBlacklist = uploadsBlacklist;
    }

    @Nullable
    public String getTemplateLoaderUrl() {
        return templateLoaderUrl;
    }

    public void setTemplateLoaderUrl(@Nullable String templateLoaderUrl) {
        this.templateLoaderUrl = templateLoaderUrl;
    }

    public boolean isConvertEnable() {
        return convertEnable;
    }

    public void setConvertEnable(boolean convertEnable) {
        this.convertEnable = convertEnable;
    }

    public boolean isDemo() {
        return demo;
    }

    public void setDemo(boolean demo) {
        this.demo = demo;
    }
}
